/**
 * @Copyright ®2012 sinosoft Co. Ltd. All rights reserved.<br/>
 * @Package:  com.sinosoft.platform.common.util<br/>
 * @FileName: XStreamDateConverter.java<br/>
 * @Description: xxxxxxxxx<br/>
 */
package com.gavinwind.inspay.common.util;

import com.thoughtworks.xstream.converters.ConversionException;
import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**  
 * 【把日期写入HierarchicalStreamWriter对象中，或从HierarchicalStreamWriter对象中读取Date对象】
 * @author chenxin
 * @date 2014-6-4 上午11:11:05 
 * @version 1.0
 */
public class XStreamDateTimeConverter extends AbstractSingleValueConverter {

    /**
     * 定义日期格式
     */
    private static final DateFormat DEFAULT_DATEFORMAT = new SimpleDateFormat(
            "yyyy-MM-dd HH:mm:ss");

    /**
     * 当传入的Class对象是Date类型是，返回true
     * @param  cType Date类型的Class对象
     * @return true为Date类型
     */
    @Override
    public boolean canConvert(Class cType) {
        return cType.equals(Date.class);
    }

    /**
     * 获取HierarchicalStreamReader对象中时间，并转换为Date对象。使用yyyy-MM-dd  HH:mm:ss格式
     * @param cDate HierarchicalStreamReader对象
     * @return 转换后的Object对象(Date类型)
     */
    @Override
    public Object fromString(String cDate) {
        // 这里将字符串转换成日期
        try {
            if(StringUtil.isBlank(cDate))
                return null;
            return DEFAULT_DATEFORMAT.parseObject(cDate);
        } catch (ParseException e) {
            throw new ConversionException("Cannot parse date " + cDate);
        }
    }

    /**
     * 把时间转换成字符串，并写入HierarchicalStreamWriter对象中。日期使用yyyy-MM-dd HH:mm:ss格式进行转换成字符串
     * @param cDate Date类型的时间对象
     */
    @Override
    public String toString(Object cDate) {
        // 这里将日期转换成字符串
        return DEFAULT_DATEFORMAT.format((Date) cDate);
    }
}
